import numpy
import math
import scipy
import scipy.io
import scipy.misc
import scipy.cluster
import scipy.cluster.vq
import matplotlib
import matplotlib.pyplot
import os
import IPython
import IPython.parallel
import itertools
import random
import sklearn
import sklearn.decomposition
import sklearn.manifold
import sklearn.cluster
import sklearn.feature_extraction
import sklearn.feature_extraction.text
base_path = "/u/mlrobert/code/local/2013_drawing_assistant/data/"
local_features_base_path = \
base_path+"local_features/bunny2/"+ \
"apparent_ridges.num_latitude_lines=20.num_longitude_lines=20.gabor.num_thetas=08.galif.patch_width=15.num_samples=32.num_tiles=04/"
local_feature_corpus_path = \
base_path+"local_feature_corpus/bunny2/"+ \
"apparent_ridges.num_latitude_lines=20.num_longitude_lines=20.gabor.num_thetas=08.galif.patch_width=15.num_samples=32.num_tiles=04.num_samples=1000000/"
if not os.path.exists(local_feature_corpus_path):
os.makedirs(local_feature_corpus_path)
local_feature_corpus_path_name_ext = local_feature_corpus_path+"local_feature_corpus.mat"
img_names = sorted(os.listdir(local_features_base_path))
num_images = len(img_names)
assert(num_images > 0)
theta_names = sorted(os.listdir(local_features_base_path+img_names[0]))
num_thetas = len(filter_response_names)
assert(num_thetas > 0)
local_feature_names = sorted(os.listdir(local_features_base_path+img_names[0]+"/"+theta_names[0]))
num_local_features = len(local_feature_names)
assert(num_local_features > 0)
num_samples = 1000000
def sample_galif_local_patch_features(i):
import numpy
import scipy
import scipy.io
import os
import random
local_feature_norm_accept_threshold = 0.01
seed = i
random.seed(seed)
while True:
img_index = random.randint(0, num_images-1)
local_feature_index = random.randint(0, num_local_features-1)
local_features = []
for theta in range(num_filter_responses):
local_feature_path = \
local_features_base_path+ \
img_names[img_index]+"/"+theta_names[theta]+"/"+local_feature_names[local_feature_index]
local_feature_mat = scipy.io.loadmat(local_feature_path)
local_feature = local_feature_mat["tile"]
local_features.append(local_feature)
local_features_1d = numpy.array(local_features).ravel()
if numpy.linalg.norm(local_features_1d) > local_feature_norm_accept_threshold:
return local_features_1d
sample_galif_local_patch_features(0)
array([ 1.25503885e-02, 1.56224507e-16, 3.55844455e-18, 9.66582880e-19, 3.68366875e-02, 2.30905840e-15, 1.46352894e-16, 5.00131662e-17, 1.94858182e-02, 9.93788711e-16, 8.55840369e-17, 2.04457259e-17, 6.83820981e-04, 3.34656629e-17, 3.07121842e-18, 2.47915646e-18, 1.72255766e-02, 3.78955182e-16, 9.25462904e-17, 5.08536479e-17, 2.79102754e-02, 1.85977674e-11, 1.45605122e-15, 6.83807528e-16, 1.13661410e-02, 2.31444308e-09, 6.26560753e-16, 3.22237962e-16, 8.96456710e-04, 7.40719153e-11, 1.79946035e-16, 1.53748180e-16, 1.96443051e-02, 1.44436009e-17, 2.85329633e-23, 1.68921152e-23, 1.81390401e-02, 7.17347757e-06, 8.16211786e-23, 4.26519579e-23, 8.60711653e-03, 7.97646317e-06, 1.96115137e-20, 1.43041018e-22, 1.02236029e-03, 3.85416214e-08, 1.58118676e-20, 1.18915935e-22, 2.09188554e-02, 2.73223009e-07, 1.18165008e-27, 2.61043996e-33, 1.15437489e-02, 8.08722398e-05, 2.62495053e-14, 1.17438601e-32, 8.09137616e-03, 2.71850477e-05, 5.76774617e-14, 7.79000906e-31, 1.07943779e-03, 8.33580671e-08, 3.68827097e-17, 2.61892030e-32, 1.70403607e-02, 2.40039935e-05, 1.03543998e-13, 8.55980828e-29, 9.66384076e-03, 1.22136727e-04, 1.85887633e-12, 4.04254467e-27, 9.51215066e-03, 1.86843736e-05, 7.83141862e-14, 6.21811219e-29, 9.07308073e-04, 2.04318140e-09, 3.01020577e-21, 1.39171331e-32, 1.13537312e-02, 2.79894630e-05, 4.82625008e-14, 7.76631626e-31, 1.06423441e-02, 7.56566660e-05, 3.57000467e-14, 1.15317296e-32, 1.42507087e-02, 2.30971841e-06, 2.23172053e-20, 1.49845643e-32, 2.44225317e-04, 8.66696219e-19, 5.61858620e-28, 1.71485744e-32, 9.09178983e-03, 6.76762374e-06, 2.58607533e-20, 2.18091184e-23, 1.43531766e-02, 8.32684418e-06, 6.90260108e-23, 3.69371529e-23, 2.51681022e-02, 2.23853453e-11, 2.65112043e-22, 1.39325937e-22, 5.70358225e-06, 2.22661557e-22, 1.41810521e-22, 1.06867037e-22, 9.36236419e-03, 2.28496178e-09, 9.50969515e-17, 5.19852707e-17, 2.50972472e-02, 2.48373544e-11, 1.41554050e-15, 6.80327916e-16, 3.44720967e-02, 1.56085493e-15, 5.42968183e-16, 3.01184693e-16, 1.21200006e-04, 2.40986194e-16, 1.75301171e-16, 1.52438534e-16], dtype=float32)
client = IPython.parallel.Client()
directView = client[:]
directView["local_features_base_path"] = local_features_base_path
directView["img_names"] = img_names
directView["num_images"] = num_images
directView["theta_names"] = theta_names
directView["num_thetas"] = num_thetas
directView["local_feature_names"] = local_feature_names
directView["num_local_features"] = num_local_features
asyncResult = directView.map_async(sample_galif_local_patch_features, range(num_samples))
print asyncResult.progress
print asyncResult.ready()
32 True
result_list = asyncResult.get()
result = numpy.array(result_list)
scipy.io.savemat(local_feature_corpus_path_name_ext, {"local_features":result}, oned_as="column")